const AUTH = require('utils/auth')
/**
 * tabBar页面路径列表 (用于链接跳转时判断的)
 * tabBarLinks为常量, 无需修改
 */
const tabBarLinks = [
  'pages/index/index',
  'pages/category/index',
  'pages/flow/index',
  'pages/user/index'
];


// 站点配置文件
import siteinfo from './siteinfo.js';
// 工具类
import util from './utils/util.js';

App({
  /** 全局变量*/
  globalData: {
    user_id: null,
  },
  // api地址
  api_root: siteinfo.siteroot + 'index.php?s=/api/',
  api_root22: siteinfo.siteroot22,

  YU: siteinfo.YU,
  xqname: siteinfo.xqname,
  //minordmoney:siteinfo.minordmoney,
  proxyid: siteinfo.proxyid,
  //mallName: siteinfo.mallName,
  uniacid: siteinfo.uniacid,
  /**
   * 生命周期函数--监听小程序初始化
   */
  onLaunch(e) {
    let _this = this;
    // 小程序主动更新
    _this.updateManager();
    // 小程序启动场景
    _this.onStartupScene(e.query);
    _this.getWxappBase();

    // ---------------检测navbar高度开始--------------------------------------
    let menuButtonObject = wx.getMenuButtonBoundingClientRect();
    console.log("小程序胶囊信息",menuButtonObject)
    wx.getSystemInfo({
      success: res => {
        let statusBarHeight = res.statusBarHeight,
          navTop = menuButtonObject.top,//胶囊按钮与顶部的距离
          navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight)*2;//导航高度
        this.globalData.navHeight = navHeight;
        this.globalData.navTop = navTop;
        this.globalData.windowHeight = res.windowHeight;
        this.globalData.menuButtonObject = menuButtonObject;
        console.log("navHeight",navHeight);
      },
      fail(err) {
        console.log(err);
      }
    })
    // ---------------检测navbar高度结束--------------------------------------
  },
  pageOnLoad: function(t) {
    var l = this;
    function s(o) {
        var e = !1, a = o.route || t.__route__ || null;
        for (var n in o.navs) o.navs[n].url === "/" + a ? e = o.navs[n].active = !0 : o.navs[n].active = !1;
        e && t.setData({
            _navbar: o
        });
    }
    console.log("----setPageNavbar----"), console.log(t);
    var c = {
        background_image: "",
        border_color: "rgba(0,0,0,.1)"
    }, o = l.globalData.navbar;
    let App = this;
    console.log(o), o && s(o), o || App._get('user/getnav', {}, function(n) {
     console.log(n)
       c.navs = n.data.res, s(c), l.globalData.navbar = c;
    });
  },
  /**
   * 小程序启动场景
   */
  onStartupScene(query) {
    let App = this;
    // 获取场景值
    let scene = this.getSceneData(query);
    // 记录推荐人id
    let refereeId = query.referee_id ? query.referee_id : scene.uid;
    refereeId > 0 && (this.saveRefereeId(refereeId));
    // 记录之后绑定推荐人，未登录的执行登录入库 mmmodify
    // 静默注册登录，记录user_id，未记录token，token未记录则认为未登录，需要弹出授权框
    wx.login({
        success: function(res) {
            console.log('---------每次进入小程序走此通道：--------------开始----------------------------');
            let _refereeId = wx.getStorageSync('referee_id')
            console.log('********************* 小程序静默登录结果：', _refereeId);
            App._post_form('user/login22', {
                code: res.code,
                referee_id: _refereeId
            }, function(result) {
                console.log('********************* 小程序静默登录结果----入库结果：', result);
                // wx.setStorageSync('token', result.data.token); // 未记录登录token
                wx.setStorageSync('user_id', result.data.user_id);
                wx.setStorageSync('true_mobile', result.data.true_mobile);
                wx.setStorageSync('user_openid', result.data.user_openid);
                wx.setStorageSync('db_avatarUrl', result.data.avatarUrl);  // 数据库中的头像路径
                console.log('---------每次进入小程序走此通道：--------------结束---------------------------',result.data);
            })
        }
    })
  },

  /**获取商城ID*/
  getWxappId() {
    return siteinfo.uniacid || 10001;
  },

  /** 记录推荐人id */
  saveRefereeId(refereeId) {
    let App = this;
    refereeId = parseInt(refereeId);
    // 要么取传递过来的推荐人id，如果推荐人id为0，则传自己的
    if (refereeId <= 0 || refereeId == App.getUserId()) {
      return false;
    }
    // 注销此段目的是每次记录新的父级id
    // if (wx.getStorageSync('referee_id')) {
    //   return false;
    // }
    wx.setStorageSync('referee_id', refereeId);
    return true;
  },

  /** 获取场景值(scene) */
  getSceneData(query) {
    return query.scene ? util.scene_decode(query.scene) : {};
  },

  // 获取小程序底部导航按钮，本文件未用到
  getnav(){ 
    let App = this;
    // 发送用户信息
    App._post_form('user/login', {
    }, result => {
      // 记录token user_id
      wx.setStorageSync('token', result.data.token);
    });
  },

  /**
   * 当小程序启动，或从后台进入前台显示，会触发 onShow
   */
  onShow(options) {
    //AUTH.asyncLogin()   //我爱小区版静默登录，注销后就是原始商城
    let App = this;
    try {
      const livePlayer = requirePlugin('live-player-plugin');
      if (options.scene == 1007 || options.scene == 1008 || options.scene == 1044) {
        livePlayer.getShareParams()
          .then(res => {
            // 直播页面的自定义参数
            let customParams = res.custom_params;
            console.log('get custom params', customParams);
            // 记录推荐人ID
            if (customParams.hasOwnProperty('referee_id')) {
              App.saveRefereeId(customParams['referee_id']);
            }
          }).catch(err => {
            console.log('get share params', err)
          });
      }
    } catch (error) {

    }
  },

  /** 执行用户登录 直接跳转到用户登录界面 */
  doLogin(delta) {
    // 保存当前页面
    let pages = getCurrentPages();
    if (pages.length) {
      let currentPage = pages[pages.length - 1];
      "pages/login/login" != currentPage.route &&
        wx.setStorageSync("currentPage", currentPage);
    }
    // 跳转授权页面
    wx.navigateTo({
      url: "/pages/login/login?delta=" + (delta || 1)
    });
  },

  /** 当前用户id */
  getUserId() {
    return wx.getStorageSync('user_id');
  },

  /** 显示成功提示框 */
  showSuccess(msg, callback) {
    wx.showToast({
      title: msg,
      icon: 'success',
      mask: true,
      duration: 1500,
      success() {
        callback && (setTimeout(() => {
          callback();
        }, 1500));
      }
    });
  },

  /** 显示失败提示框 */
  showError(msg, callback) {
    wx.showModal({
      title: '友情提示',
      content: msg,
      showCancel: false,
      success(res) {
        // callback && (setTimeout(() => {
        //   callback();
        // }, 1500));
        callback && callback();
      }
    });
  },

  /** get请求 res.data.code==-1 则跳转到登录页面 doLogin(2) */
  _get(url, data, success, fail, complete, check_login) {
    wx.showNavigationBarLoading();
    let _this = this;
    // 构造请求参数
    data = data || {};
    data.wxapp_id = _this.getWxappId();

    // if (typeof check_login === 'undefined')
    //   check_login = true;

    // 构造get请求 
    let request = () => {
      data.token = wx.getStorageSync('token');
      wx.request({
        url: _this.api_root + url,
        header: {
          'content-type': 'application/json'
        },
        data: data,
        success(res) {
          if (res.statusCode !== 200 || typeof res.data !== 'object') {
            console.log(res);
            _this.showError('网络请求出错');
            return false;
          }
          if (res.data.code === -1) {
            // 登录态失效, 重新登录
            wx.hideNavigationBarLoading();
            _this.doLogin(2);
          } else if (res.data.code === 0) {
            _this.showError('服务数据错误：'+res.data.msg, () => {
              fail && fail(res);
            });
            return false;
          } else {
            success && success(res.data);
          }
        },
        fail(res) {
          _this.showError(res.errMsg, () => {
            fail && fail(res);
          });
        },
        complete(res) {
          wx.hideNavigationBarLoading();
          complete && complete(res);
        },
      });
    };
    // 判断是否需要验证登录
    check_login ? _this.doLogin(request) : request();
  },

  /** post提交 res.data.code === -1 则 doLogin(1) */
  _post_form(url, data, success, fail, complete, isShowNavBarLoading) {
    let _this = this;

    isShowNavBarLoading || true;
    data.wxapp_id = _this.getWxappId();
    data.token = wx.getStorageSync('token');

    // 在当前页面显示导航条加载动画
    if (isShowNavBarLoading == true) {
      wx.showNavigationBarLoading();
    }
    wx.request({
      url: _this.api_root + url,
      header: {
        'content-type': 'application/x-www-form-urlencoded',
      },
      method: 'POST',
      data: data,
      success(res) {
        if (res.statusCode !== 200 || typeof res.data !== 'object') {
          _this.showError('网络请求出错');
          return false;
        }
        if (res.data.code === -1) {
          // 登录态失效, 重新登录
          wx.hideNavigationBarLoading();
          _this.doLogin(1);
          return false;
        } else if (res.data.code === 0) {
          _this.showError(res.data.msg, () => {
            fail && fail(res);
          });
          return false;
        }
        success && success(res.data);
      },
      fail(res) {
        // console.log(res);
        _this.showError(res.errMsg, () => {
          fail && fail(res);
        });
      },
      complete(res) {
        wx.hideNavigationBarLoading();
        // wx.hideLoading();
        complete && complete(res);
      }
    });
  },

  // 调用api_root22域名接口的post请求
  _post_form22(url, data, success, fail, complete, isShowNavBarLoading) {
    let _this = this;

    isShowNavBarLoading || true;
    // 在当前页面显示导航条加载动画
    if (isShowNavBarLoading == true) {
      wx.showNavigationBarLoading();
    }
    wx.request({
      url: _this.api_root22 + url,
      header: {
        'content-type': 'application/x-www-form-urlencoded',
      },
      method: 'POST',
      data: data,
      success(res) {
        if (res.data.code){
          success && success(res.data);
        }
        else{
          console.log('请求数据返回错误XXXXXXXXXXXX---------------------' + url + '--------------------------' + res.data);
          _this.showError(res.data.msg, () => {
            fail && fail(res);
          });
          return false;
        }
      },
      fail(res) {
        _this.showError(res.msg, () => {
          fail && fail(res);
        });
      },
      complete(res) {
        wx.hideNavigationBarLoading();
        complete && complete(res);
      }
    });
  },

  /** 验证是否存在user_info */
  validateUserInfo() {
    let user_info = wx.getStorageSync('user_info');
    return !!wx.getStorageSync('user_info');
  },

  /** 小程序主动更新 */
  updateManager() {
    if (!wx.canIUse('getUpdateManager')) {
      return false;
    }
    const updateManager = wx.getUpdateManager();
    updateManager.onCheckForUpdate(res => {
      // 请求完新版本信息的回调
      // console.log(res.hasUpdate)
    });
    updateManager.onUpdateReady(() => {
      updateManager.applyUpdate()
      // wx.showModal({
      //   title: '更新提示',
      //   content: '新版本已经准备好，即将重启应用',
      //   showCancel: false,
      //   success(res) {
      //     if (res.confirm) {
      //       // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
      //       updateManager.applyUpdate()
      //     }
      //   }
      // });
    });
    updateManager.onUpdateFailed(() => {
      // 新的版本下载失败
      wx.showModal({
        title: '更新提示',
        content: '新版本下载失败',
        showCancel: false
      })
    });
  },

  /** 获取tabBar页面路径列表 */
  getTabBarLinks() {
    return tabBarLinks;
  },

  /** 获取小程序基础信息 */
  getWxappBase(callback) {
    let App = this;
    App._get('wxapp/base1', {}, result => {
      // 记录小程序基础信息
      console.log('first data :',result.data.wxapp)
      wx.setStorageSync('wxapp', result.data.wxapp);
      callback && callback(result.data.wxapp);
    }, false, false);
  },
  /** 设置当前页面标题 */
  setTitle() {
    let App = this,
      wxapp;
    if (wxapp = wx.getStorageSync('wxapp')) {
      wx.setNavigationBarTitle({
        title: wxapp.navbar.wxapp_title
      });
    } else {
      App.getWxappBase(() => {
        App.setTitle();
      });
    }
  },

  /** 设置navbar标题、颜色 */
  setNavigationBar() {
    let App = this;
    // 获取小程序基础信息
    App.getWxappBase(wxapp => {
      // 设置navbar标题、颜色
      console.log('wxapp wxapp wxapp wxapp wxapp', wxapp)
     if(wxapp.top_text_color=='20'){
      var textcolor="#ffffff"
     }
     else{
      var textcolor="#000000"
     }
      wx.setNavigationBarColor({
        frontColor: textcolor,
        backgroundColor: wxapp.top_background_color
      })
    });
  },
  // 设置tabbar购物车数值总数
  setBuyCarNum(num){
    console.log('3333333333333333',num);
    if(num>0){
      wx.setStorageSync('buycarnum', num);
    }
    else if(num==0){
      wx.setStorageSync('buycarnum', num);
    }
  },
  // 设置tabbar购物车数值总数，并设置下面导航浮标购物车数量
  setBuyCarNumFun(){
    var num = wx.getStorageSync('buycarnum')
    console.log('delete delete delete',num);
    if(num>0){
      wx.setTabBarBadge({
        index: 2,
        text: num+'',
      })
    }
    else if(num==0){
      wx.removeTabBarBadge({
        index: 2,
      })
    }
  },
  /** 跳转到指定页面 支持tabBar页面 */
  navigationTo(url) {
    if (!url || url.length == 0) {
      return false;
    }
    let tabBarLinks = this.getTabBarLinks();
    // tabBar页面
    if (tabBarLinks.indexOf(url) > -1) {
      wx.navigateTo({
        url: '/' + url
      });
    } else {
      // 普通页面
      wx.navigateTo({
        url: '/' + url
      });
    }
  },

  /** 记录formId (因微信模板消息已下线，所以formId取消不再收集) */
  saveFormId(formId) {
    return true;
    // let _this = this;
    // console.log('saveFormId');
    // if (formId === 'the formId is a mock one') {
    //   return false;
    // }
    // _this._post_form('wxapp.formId/save', {
    //   formId: formId
    // }, null, null, null, false);
  },

  /** 生成转发的url参数 */
  getShareUrlParams(params) {
    let _this = this;
    return util.urlEncode(Object.assign({
      referee_id: _this.getUserId()
    }, params));
  },

  /** 发起微信支付 */
  wxPayment(option) {
    let options = Object.assign({
      payment: {},
      success: () => {},
      fail: () => {},
      complete: () => {},
    }, option);
    wx.requestPayment({
      timeStamp: options.payment.timeStamp,
      nonceStr: options.payment.nonceStr,
      package: 'prepay_id=' + options.payment.prepay_id,
      signType: 'MD5',
      paySign: options.payment.paySign,
      success(res) {
        options.success(res);
      },
      fail(res) {
        options.fail(res);
      },
      complete(res) {
        options.complete(res);
      }
    });
  },

  /** 验证登录 静默会有user_id，无token，只有token和user_id同时有数据了，才会判断已登录 */
  checkIsLogin() {
    return wx.getStorageSync('token') != '' && wx.getStorageSync('user_id') != '';
  },

  /** 授权登录, 暂未找到使用的地方，可能从未使用 */
  getUserInfo(e, callback) {
    let App = this;
    if (e.detail.errMsg !== 'getUserInfo:ok') {
      return false;
    }
    wx.showLoading({
      title: "正在登录",
      mask: true
    });
    // 执行微信登录
    wx.login({
      success(res) {
        // 发送用户信息
        App._post_form('user/login', {
          code: res.code,
          user_info: e.detail.rawData,
          encrypted_data: e.detail.encryptedData,
          iv: e.detail.iv,
          signature: e.detail.signature,
          referee_id: wx.getStorageSync('referee_id')
        }, result => {
          // 记录token user_id
          wx.setStorageSync('token', result.data.token);
          wx.setStorageSync('user_id', result.data.user_id);
          // 执行回调函数
          callback && callback();
        }, false, () => {
          wx.hideLoading();
        });
      }
    });
  },

});